package teaching.models;

import teaching.data.LearningSet;
import teaching.data.Vecteur;

public class Neurone implements ScoringFunction {

	Vecteur theta;
	public double dern_entree;
	public double dern_sortie;
	public Vecteur a;
	public double gamma;
	
	public Neurone (int taille){
		theta = new Vecteur (taille);
		a = new Vecteur (taille);
	}
	
	public Vecteur getTheta(){
		return theta;
	}
	
	public void setTheta(Vecteur v){
		theta = v;
	}
	
	public double g(double in){
		return(Math.tanh(in));
	}
	
	public double gprim(double in){
		return (1/(Math.pow(Math.cosh(in),2)));
	}
	
	public void learn(double u, double epsilon){
		gamma = gprim(dern_entree)*(u);
		for (int i=0;i<a.size();i++){
			theta.addValue(i, a.getValue(i)*epsilon*gamma);
		}
		
	}
	
	@Override
	public double getScore(Vecteur v) {
		dern_entree=theta.computeDOTProduct(v);
		dern_sortie=g(dern_entree);
		return dern_sortie;
	}

}
